# -*- encoding:UTF-8 -*-

def sayHello(name):
    "输出欢迎语"
    print("Hello ", name)
    return


sayHello("Tom")


# 不可更改对象参数
def add(a, b):
    "加法"
    print("add before--a:", a, ",b:", b)
    a = a + b
    b = a - b
    print("add after--a:", a, ",b:", b)
    return


a = 10
b = 20
print("a:", a, ",b:", b)
add(a, b)
print("a:", a, ",b:", b)


# 方法
def sum(list):
    sum = 0
    for a in list:
        sum += a
    return sum


list = [1, 2, 5, 4, 6, 2, 1]
print(sum(list))


# 可更改对象参数
def modify(list):
    a = [7, 8, 9, 4, 7]
    list.append(a)
    return list


print(list)
modify(list)
print(list)


# 关键字参数
def info(name, age):
    print("name:", name)
    print("age:", age)
    return


name = "Tom"
age = 50
info(name, age)
info(age, name)
info(age=50, name="Tom")


# 默认参数
def printInfo(name, age=19):
    print("name:", name)
    print("age:", age)
    return


printInfo("Jhon")
printInfo("Jhon", 25)


# 不定长参数
def multiParam(args1, *other):
    print("输出所有参数")
    print(args1)
    for a in other:
        print(a)
    return


multiParam(1)
multiParam(1, 2)
multiParam(1, 2, 3, 4, 5, 6, 7, 8, 9)

# 匿名函数
'''python 使用 lambda 来创建匿名函数。
    ·lambda只是一个表达式，函数体比def简单很多。
    ·lambda的主体是一个表达式，而不是一个代码块。仅仅能在lambda表达式中封装有限的逻辑进去。
    ·lambda函数拥有自己的命名空间，且不能访问自有参数列表之外或全局命名空间里的参数。
    ·虽然lambda函数看起来只能写一行，却不等同于C或C++的内联函数，后者的目的是调用小函数时不占用栈内存从而增加运行效率。
语法
    lambda函数的语法只包含一个语句，如下：
    lambda [arg1 [,arg2,.....argn]]:expression
'''
sum1 = lambda a, b: a + b

print(sum1(40, 60))

print('-------------------------------')

def invert(list):
    return [list(item) for item in zip(*list)]

def invert1(list):
    return [row[::-1] for row in list]

x = [1,2,3]
y = [4,5,6]
z = [7,8,9]
xyz = zip(x,y,z)
print(invert(xyz))
print(invert1(xyz))
